\section{Introduction}

Rising power dissipation in highly integrated chips has become an increasingly
large problem in recent years for architects, disrupting Moore's Law.
Heterogeneous computing holds the promise of circumventing the power problems
faced by today's traditional, homogeneous multicore systems. However,
heterogeneous systems present several new changes which must be overcome to
fully reap the benefits they offer. One of the major problems is
programmability. Today different languages are used to program different
hardware, such as GPUs (CUDA, OpenCL), FPGAs (Bluespec, Verilog, SystemC) and
DSPs (C, assembly). These differences result in different parallelism models,
which makes it difficult for a programmer to be an expert in more than one class
of devices. On the other hand, it is possible that different hardware and 
corresponding parallelism models are suitable for different applications.

In order to better utilize these hardware platforms, a good understanding and
characterization of these heterogeneous programming models is needed. In this
project, we compare these different parallelism models on different platforms.
Specifically, we measure the performance metrics of running some selected
benchmarks on different platforms, and try to answer the following questions

\begin{itemize}
  \item What is the best platform for running a specific benchmark.  \item What is the underlying reason that the platform is suitable or not suitable for programming the benchmark.
\end{itemize}

Based on the results, we try to provide a model that would help the programmer select theright heterogeneous programming model to implement an application.

\subsection{Finished Tasks}
In the first phase of this project, we have finished the following work items.
\begin{itemize}
  \item We selected and studied three heterogeneous programming models,
  including Nvidia CUDA, OpenCL and dataflow programming model (e.g Verilog, Bluespec) as described in section \ref{sec:programmingmodel}.
  \item We set up different heterogeneous platforms for measuring the
  performance, section \ref{sec:platform}.
  \item We ported and implemented some small benchmarks using the heterogeneous
  programming models selcted in our project, section \ref{sec:benchmark}.
  \item We collected some preliminary results for a few benchmarks, and did simple
  comparison among them, section \ref{sec:eval}.
\end{itemize}

The ongoing work is described in section \ref{sec:ongoing}.
